home *** CD-ROM | disk | FTP | other *** search
/ BMUG Revelations / BMUG Revelations.toast / Utilities / Text and Speech / UUTool / uu engine / uuencode⁄c / encode.c < prev   
C/C++ Source or Header  |  1991-06-15  |  3KB  |  134 lines

  1. /* 
  2.     REAL Simple UENG Sample App
  3.     Written by Leonard Rosenthol
  4.     6/1/91
  5.     
  6.     Don't forget to copy the uu**code resource over and rename it encode.π.rsrc.
  7. */
  8.  
  9. #include "UUGlue.h"
  10.  
  11. /* Prototypes */
  12. void     InitToolbox(void);
  13. void    getOrigFile(SFReply *reply);
  14. void    getDestFile(SFReply *reply, Str255 destName);
  15. OSErr     encodeFiles(SFReply origFile, SFReply destFile);
  16. char *     Pstrcpy(register Str255 s1, register Str255 s2);
  17. char *     Pstrcat(register Str255 s1, register Str255 s2);
  18.  
  19.  
  20. main()
  21. {
  22.     SFReply    origFile, destFile;
  23.     OSErr    err;
  24.     Str255    origName;
  25.     
  26.     InitToolbox();
  27.     getOrigFile(&origFile);
  28.     if (origFile.good)
  29.     {
  30.         Pstrcpy(origName, origFile.fName);
  31.         Pstrcat(origName, (StringPtr)"\p.uu");
  32.         getDestFile(&destFile, origName);
  33.         if (destFile.good)
  34.         {
  35.             err = encodeFiles(origFile, destFile);
  36.         }
  37.     }
  38. }
  39.  
  40. void InitToolbox()
  41. {
  42.     InitGraf(&thePort);
  43.     InitCursor();
  44.     InitFonts();
  45.     InitWindows();
  46.     InitMenus();
  47.     InitDialogs(0L);
  48.     TEInit();
  49.     FlushEvents(-1, 0);
  50. }
  51.  
  52.  
  53. void getOrigFile(SFReply *reply)
  54. {
  55.     Point         where;
  56.     SFTypeList    typeList;
  57.     
  58.     SetPt(&where, 50, 50);
  59.     typeList[0] = 'TEXT';
  60.     SFGetFile(where, (StringPtr)"\p", (ProcPtr)0L, 1, typeList, (ProcPtr)0L, reply);
  61. }
  62.  
  63. void getDestFile(SFReply *reply, Str255 destName)
  64. {
  65.     Point         where;
  66.     
  67.     SetPt(&where, 50, 50);
  68.     SFPutFile(where, (StringPtr)"\pName the encoded file", destName, 0L, reply);
  69. }
  70.  
  71. OSErr encodeFiles(SFReply origFile, SFReply destFile)
  72. {
  73.     Handle    engineHdl, tableHdl;
  74.     OSErr    err, err1;
  75.     int        origRefNum, destRefNum;
  76.     int        numbufrs = 100;
  77.     Str255    header;
  78.     long    count;
  79.     
  80.     err = FSOpen(origFile.fName, origFile.vRefNum, &origRefNum);
  81.     if (err == noErr)
  82.     {
  83.         err = Create(destFile.fName, destFile.vRefNum, 'MPS ', 'TEXT');
  84.         if (err == noErr)
  85.         {
  86.             err = FSOpen(destFile.fName, destFile.vRefNum, &destRefNum);
  87.             Pstrcpy(header, (StringPtr)"\pbegin 0755 ");
  88.             Pstrcat(header, origFile.fName);
  89.             Pstrcat(header, (StringPtr)"\p\r");
  90.             count = (long)header[0];
  91.             err = FSWrite(destRefNum, &count, &header[1]);
  92.             
  93.             UULoad(&tableHdl, &engineHdl);
  94.             err = uuencode(origRefNum, destRefNum, numbufrs, 0L, *tableHdl, *engineHdl);
  95.             UUnload(tableHdl, engineHdl);
  96.             
  97.             Pstrcpy(header, (StringPtr)"\pend\r");
  98.             count = (long)header[0];
  99.             err = FSWrite(destRefNum, &count, &header[1]);
  100.             err1 = FSClose(destRefNum);
  101.         }
  102.         err1 = FSClose(origRefNum);
  103.     }
  104.     return(err);
  105. }
  106.  
  107.  
  108. /* Some string handling routines */
  109. char * Pstrcpy(register Str255 s1, register Str255 s2)
  110. {
  111.     register unsigned int    i;
  112.     unsigned int            l = s2[0];
  113.     char                    *s = (char *) s1;
  114.     
  115.     for( i = 0; i <= l; i++ ) {
  116.         *s1++ = *s2++;
  117.     }
  118.     
  119.     return( s );
  120. }
  121. char * Pstrcat(register Str255 s1, register Str255 s2)
  122. {
  123.     register unsigned int    i;
  124.     unsigned int            l = s2[0];
  125.     char                    *s = (char *) s1;
  126.     
  127.     s1 = &s1[s1[0]];
  128.     for( i = 1; i <= l; i++ ) {
  129.         *++s1 = *++s2;
  130.     }
  131.     s[0] += --i;
  132.     
  133.     return( s );
  134. }